package lm.concurrency.day6.threadpool;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;

import static lm.concurrency.util.Sleeper.sleep;

@Slf4j
public class DemoTest {

    public static void main(String[] args) {
        ThreadPool threadPool = new ThreadPool(2,
                2000, TimeUnit.MILLISECONDS, 2, (queue, task)->{
            // 1. 死等
//            queue.put(task);
            // 2) 带超时等待
            queue.offer(task, 3000, TimeUnit.MILLISECONDS);
            // 3) 让调用者放弃任务执行
//            log.debug("放弃{}", task);
            // 4) 让调用者抛出异常
//            throw new RuntimeException("任务执行失败 " + task);
            // 5) 让调用者自己执行任务
            //task.run();
        });
        for (int i = 0; i < 5; i++) {
            int finalI = i;
            threadPool.execute(() -> {
//                try {
//                    Thread.sleep(2000L);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
                log.debug("i执行中:{}", finalI);
            });
        }
        sleep(10);
//        for (int j = 0; j < 3; j++) {
//            int finalJ = j;
//            threadPool.execute(() -> {
////                try {
////                    Thread.sleep(1000L);
////                } catch (InterruptedException e) {
////                    e.printStackTrace();
////                }
//                log.debug("j执行中:{}", finalJ);
//            });
//        }
    }
}